package prj3;

/**
 * Interface for objects that wish to retain two values
 * for themselves (the visible value and the history value). 
 * The history value can be a new value or an old value depending on
 * how the Object wants to use it.
 * @author romain
 *
 */
public interface IHistoryValue {

	/**
	 * Gets the value for this cell. This is the currently
	 * visible value
	 * @return float
	 */
	public float getValue();
	
	/**
	 * Sets the value for this cell. This modifies
	 * the currently visible value
	 * @param value
	 * @throws AssertionError if the cell is not mutable
	 */
	public void setValue(float value);
	
	/**
	 * Gets the value stored in history
	 * @return
	 */
	public float getHistoryValue();
	
	/**
	 * Sets the value kept in history for this cell
	 * @param value float
	 */
	public void setHistoryValue(float value);
	
	/**
	 * Switch the history value and the visible value
	 *
	 */
	public boolean switchValues();
}
